﻿package com.logrogue.console.data {
	
	import flash.events.IEventDispatcher;
	
	/**
	 * Интерфейс сессии логирования.
	 * 
	 * @version  1.0
	 * @author   meps
	 */
	public interface ILogApplication extends IEventDispatcher {
		
		/**
		 * Идентификатор приложения.
		 * 
		 * <p>Идентификатор назначается клиентом самостоятельно или задается
		 * разработчиком. Все потоки событий с одинаковыми идентификаторами
		 * попадают в один лог, вне зависимости от того какие используются
		 * источники данных логирования.</p>
		 */
		function get appID():String;
		
		/**
		 * Время начала логирования.
		 */
		function get appStart():Date;
		
		/**
		 * Имя приложения.
		 */
		function get appName():String;
		
		/**
		 * Версия приложения.
		 */
		function get appVersion():String;
		
		/**
		 * Номер сборки приложения.
		 */
		function get appBuild():int;
		
		///////////////////////////////////////////////////////////////////////
		
		/**
		 * Общее количество контролируемых модулей.
		 * 
		 * <p>При появлении каждого нового модуля приложения информация о нем
		 * попадает в лог, а список модулей пополняется новым именем. Индексы
		 * модулей могут быть использованы для фильтрации записей в логе.</p>
		 */
		function get modCount():int;
		
		/**
		 * Название модуля по индексу.
		 * 
		 * @param   индекс;
		 * 
		 * @return  название модуля;
		 */
		function modNameAt(index:int):String;
		
		/**
		 * Название модуля по идентификатору.
		 * 
		 * @param   идентификатор;
		 * 
		 * @return  название модуля;
		 */
		function modNameID(id:int):String;
		
		/**
		 * Событие добавления модуля.
		 */
		function get EVENT_MODULE():String;
		
		///////////////////////////////////////////////////////////////////////
		
		/**
		 * Общее количество разработчиков.
		 * 
		 * <p>При появлении каждого нового разработчика информация о нем
		 * попадает в лог, а список разработчиков пополняется новым именем.
		 * Индексы разработчиков могут быть использованы для фильтрации записей
		 * в логе.</p>
		 */
		function get devCount():int;
		
		/**
		 * Имя разработчика.
		 * 
		 * @param   индекс;
		 * 
		 * @return  имя разработчика;
		 */
		function devNameAt(index:int):String;
		
		/**
		 * Имя разработчика.
		 * 
		 * @param   идентификатор;
		 * 
		 * @return  имя разработчика;
		 */
		function devNameID(id:int):String;
		
		/**
		 * Событие добавления разработчика.
		 */
		function get EVENT_DEVELOPER():String;
		
		///////////////////////////////////////////////////////////////////////
		
		/**
		 * Общее количество записей в логе.
		 */
		function get logCount():int;
		
		function logRecordAt(index:int):ILogRecord;
		
		function logRecordID(id:int):ILogRecord;
		
		/**
		 * Событие добавления записи.
		 */
		function get EVENT_LOG():String;
		
	}
	
}